

export default `


program
      : statement_list                         {tree = objs[0]}
		;

statement_list
      : statement_list statement               {return new TreeNode ('STMT_LIST', 1,2)}
      |                                        {return new TreeNode ('EMPTY_STMT')}
      ;


statement           
      :  符号                                   {return new TreeNode ('EMPTY_STMT)}
      | 结构C  符号                             {return new TreeNode ('statement_结构A',1)}
      | 动作B  符号                             {return new TreeNode ('statement_动作A',1)}
      | error END_STMT                         {return new TreeNode ('ERROR_STMT')}
      ;
结构C
     : 结构B                                    {return new TreeNode ('结构B',1)} 
     | 动作B 结构B                               {return new TreeNode ('动作名词',1,2)}
     | 把 结构B 动作B                            {return new TreeNode ('把名词动作',2,3)}
     | 把 结构B 动作B 结构B                       {return new TreeNode ('把名词动作名词',2,3,4)}     
;
结构B
     : 结构A                                     {return new TreeNode ('结构A',1)} 
     | 结构A 和 结构A                             {return new TreeNode ('和结构',1,3)} 
;
结构A
     : 名词A 的 名词A                            {return new TreeNode ('的名词',1, 3)}    
;
名词A
      : 名词                                     {return new TreeNode ('名词',1)}
      | 名词A 名词                               {return new TreeNode ('多属性名词',1, 2)}  
      ;

动作B
      : 动作A                                    {return new TreeNode ('动作A',1)}
      | 动作A 和 动作A                             {return new TreeNode ('和动作',1,3)} 
      ;     
动作A
      : 动作                                    {return new TreeNode ('动作',1)}
      ;
`